home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (C) 2000-1 drscholl@users.sourceforge.net
- This is free software distributed under the terms of the
- GNU Public License. See the file COPYING for details.
-
- $Id: setup.c,v 1.5 2001/02/15 08:39:45 drscholl Exp $ */
-
- /* Modified 29/05/01 : Moved #include <sys/types.h> above #include
- for Amiga port : <sys/stat.h> so that the types used in sys/types.h are
- typedef'd beforehand
-
- Added include "confdefs.h" since we are not using the
- CONFIGURE script
-
- Removed default SHAREDIR, since we can't really assume
- a default directory on the Amiga
- */
-
- #include "confdefs.h"
-
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
-
- #include <sys/types.h>
-
- #include <sys/stat.h>
- /*#include <sys/types.h>*/
- #include <fcntl.h>
- #ifndef WIN32
- #include <unistd.h>
- #define MKDIR(a,b) mkdir(a,b)
- #define DIRSEP '/'
- #else
- #include <windows.h>
- #include <direct.h>
- #include <io.h>
- #define MKDIR(a,b) mkdir(a)
- #define F_OK 00
- #define DIRSEP '\\'
- #define S_IRUSR _S_IREAD
- #define S_IWUSR _S_IWRITE
- #endif
-
- /* opennap installation program */
-
- #if WIN32
- #define EXT ".exe"
- #include "opennap.h"
- #else
- #define EXT ""
- #endif /* WIN32 */
-
- static void
- usage (void)
- {
- printf ("usage: setup%s [ -h ] [ -v ]\n", EXT);
- puts (" -h display this help message");
- puts (" -v display the version");
- exit (0);
- }
-
- static void
- version (void)
- {
- printf ("%s setup%s %s", PACKAGE, EXT, VERSION);
- exit (0);
- }
-
- static void
- prompt (const char *str, const char *def, char *buf, int buflen)
- {
- char *p;
-
- buf[buflen - 1] = 0;
- while (1)
- {
- printf ("%s? [%s]: ", str, def ? def : "<no default>");
- fflush (stdout);
- if (!fgets (buf, buflen - 1, stdin))
- {
- puts ("EOF");
- exit (1);
- }
- if (buf[0] == '\n' || buf[0] == '\r')
- {
- if (def)
- {
- strncpy (buf, def, buflen - 1);
- return;
- }
- }
- else
- {
- p = strpbrk (buf, " \r\n");
- *p = 0;
- if (buf[0])
- {
- return;
- }
- }
- }
- }
-
- int
- main (int argc, char **argv)
- {
- int i;
- int fd;
- char path[256];
- char buf[256];
- char nick[64];
- char pass[64];
- char email[64];
- FILE *fp;
-
- while ((i = getopt (argc, argv, "hv")) != -1)
- {
- switch (i)
- {
- case 'v':
- version ();
- break;
- case 'h':
- default:
- usage ();
- }
- }
-
- /* ensure that the configuration directory exists */
- /* strcpy (path, SHAREDIR);
- puts ("Checking for OpenNap configuration directory...");
- if (access (path, F_OK))
- {
- if (errno != ENOENT)
- perror (path); */
- do
- {
- prompt ("Where should I install OpenNap", "", path,
- sizeof (path));
- if (MKDIR (path, S_IRWXU))
- perror (path);
- }
- while (access (path, F_OK));
- printf ("Created %s\n", path);
- /* }*/
- /* directory is created at this point */
-
- /* check to see if the users file exists */
- puts ("Checking for OpenNap user database...");
- snprintf (buf, sizeof (buf), "%s%cusers", path, DIRSEP);
- if (access (buf, F_OK))
- {
- if (errno != ENOENT)
- {
- perror (buf);
- exit (1);
- }
- /* prompt the user for the elite login */
- prompt ("Enter nickname for server owner (elite)", 0, nick,
- sizeof (nick));
- prompt ("Enter password for nickname", 0, pass, sizeof (pass));
- prompt ("Enter email address", "email@here.com", email,
- sizeof (email));
- /* write out the file */
- fd = open (buf, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
- if (fd < 0)
- {
- perror ("open");
- exit (1);
- }
- fp = fdopen (fd, "w");
- if (!fp)
- {
- perror (buf);
- exit (1);
- }
- fprintf (fp, "%s %s %s Elite 0 0", nick, pass, email);
- if (fclose (fp))
- {
- perror ("fclose");
- exit (1);
- }
- printf ("Created %s\n", buf);
- }
- /* if opennap is installed other than in the default location, set
- up a config file with the proper config_dir variable */
- /* if (strcmp (path, SHAREDIR) != 0)
- {*/
- snprintf (buf, sizeof (buf), "%s%cconfig", path, DIRSEP);
- if (access (buf, F_OK))
- {
- if (errno != ENOENT)
- {
- perror (buf);
- exit (1);
- }
- fd = open (buf, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
- if (fd < 0)
- {
- perror ("open");
- exit (1);
- }
- fp = fdopen (fd, "w");
- if (!fp)
- {
- perror ("fdopen");
- exit (1);
- }
- fprintf (fp, "# auto generated by %s setup%s %s\n\n", PACKAGE,
- EXT, VERSION);
- /* fprintf (fp, "# package was configured to install in %s\n",
- SHAREDIR);*/
- fprintf(fp, "# SHAREDIR not supported in this version\n");
- fprintf (fp, "# but OpenNap is installed here:\n");
- fprintf (fp, "config_dir %s\n", path);
- fclose (fp);
- printf ("Created %s\n", buf);
- }
-
- #if WIN32
- /* create a batch file to easily launch the server */
- snprintf (buf, sizeof (buf), "%s\\launch.bat", path);
- fp = fopen (buf, "w");
- if (!fp)
- {
- perror (buf);
- exit (1);
- }
- fprintf (fp, "%s\\opennap.exe -c %s\\config", path, path);
- fclose (fp);
- printf ("Created %s\n", buf);
- printf ("You can start the server by running %s\\launch.bat\n", path);
- #endif /* WIN32 */
- /* }
- else
- puts
- ("OpenNap is installed in default directory, no config file created"); */
- puts ("Congratulations! OpenNap is now installed");
-
- exit (0);
- }
-